﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Mogre;
using MogreNewt;

namespace eqgen
{
    class Level
    {
        Entity GraphicsEntity;
        SceneNode GraphicsNode;

        Entity CollisionEntity;
        SceneNode CollisionNode;
        Body Body;

        public void SetGraphicsMesh(String meshFile)
        {
            // Tworzymy węzeł
            GraphicsNode = Engine.Singleton.SceneManager.RootSceneNode.CreateChildSceneNode();
            // Tworzymy obiekt graficzny
            GraphicsEntity = Engine.Singleton.SceneManager.CreateEntity(meshFile);
            // Wiążemy obiekt graficzny z węzłem
            GraphicsNode.AttachObject(GraphicsEntity);
            // Wyłączamy rzucanie cieni
            GraphicsEntity.CastShadows = false;
        }

        public void SetCollisionMesh(String meshFile)
        {
            CollisionNode = Engine.Singleton.SceneManager.RootSceneNode.CreateChildSceneNode();
            CollisionEntity = Engine.Singleton.SceneManager.CreateEntity(meshFile);
            CollisionNode.AttachObject(CollisionEntity);

            // Nie chcemy aby siatka kolizyjna była widoczna
            CollisionNode.SetVisible(false);

            // Tworzymy parser sceny
            MogreNewt.CollisionPrimitives.TreeCollisionSceneParser collision = new MogreNewt.CollisionPrimitives.TreeCollisionSceneParser(Engine.Singleton.NewtonWorld);
            // Wydobywamy informacje o siatce związanej z węzłem
            collision.ParseScene(CollisionNode, true, 1);
            // Tworzymy ciało nadając mu wczytany kształt
            Body = new Body(Engine.Singleton.NewtonWorld, collision);
            // Niszczymy kształt, który już został wykorzystany do utworzenia ciała
            collision.Dispose();

            Body.AttachNode(CollisionNode);
        }
    }
}
